﻿using System;
using Mono.Collections.Generic;

namespace Mono.Cecil
{
	// Token: 0x020000A3 RID: 163
	public abstract class MethodSpecification : MethodReference
	{
		// Token: 0x17000185 RID: 389
		// (get) Token: 0x0600066F RID: 1647 RVA: 0x0002132C File Offset: 0x0001F52C
		public MethodReference ElementMethod
		{
			get
			{
				return this.method;
			}
		}

		// Token: 0x17000186 RID: 390
		// (get) Token: 0x06000670 RID: 1648 RVA: 0x00021344 File Offset: 0x0001F544
		// (set) Token: 0x06000671 RID: 1649 RVA: 0x00002AA0 File Offset: 0x00000CA0
		public override string Name
		{
			get
			{
				return this.method.Name;
			}
			set
			{
				throw new InvalidOperationException();
			}
		}

		// Token: 0x17000187 RID: 391
		// (get) Token: 0x06000672 RID: 1650 RVA: 0x00021364 File Offset: 0x0001F564
		// (set) Token: 0x06000673 RID: 1651 RVA: 0x00002AA0 File Offset: 0x00000CA0
		public override MethodCallingConvention CallingConvention
		{
			get
			{
				return this.method.CallingConvention;
			}
			set
			{
				throw new InvalidOperationException();
			}
		}

		// Token: 0x17000188 RID: 392
		// (get) Token: 0x06000674 RID: 1652 RVA: 0x00021384 File Offset: 0x0001F584
		// (set) Token: 0x06000675 RID: 1653 RVA: 0x00002AA0 File Offset: 0x00000CA0
		public override bool HasThis
		{
			get
			{
				return this.method.HasThis;
			}
			set
			{
				throw new InvalidOperationException();
			}
		}

		// Token: 0x17000189 RID: 393
		// (get) Token: 0x06000676 RID: 1654 RVA: 0x000213A4 File Offset: 0x0001F5A4
		// (set) Token: 0x06000677 RID: 1655 RVA: 0x00002AA0 File Offset: 0x00000CA0
		public override bool ExplicitThis
		{
			get
			{
				return this.method.ExplicitThis;
			}
			set
			{
				throw new InvalidOperationException();
			}
		}

		// Token: 0x1700018A RID: 394
		// (get) Token: 0x06000678 RID: 1656 RVA: 0x000213C4 File Offset: 0x0001F5C4
		// (set) Token: 0x06000679 RID: 1657 RVA: 0x00002AA0 File Offset: 0x00000CA0
		public override MethodReturnType MethodReturnType
		{
			get
			{
				return this.method.MethodReturnType;
			}
			set
			{
				throw new InvalidOperationException();
			}
		}

		// Token: 0x1700018B RID: 395
		// (get) Token: 0x0600067A RID: 1658 RVA: 0x000213E4 File Offset: 0x0001F5E4
		// (set) Token: 0x0600067B RID: 1659 RVA: 0x00002AA0 File Offset: 0x00000CA0
		public override TypeReference DeclaringType
		{
			get
			{
				return this.method.DeclaringType;
			}
			set
			{
				throw new InvalidOperationException();
			}
		}

		// Token: 0x1700018C RID: 396
		// (get) Token: 0x0600067C RID: 1660 RVA: 0x00021404 File Offset: 0x0001F604
		public override ModuleDefinition Module
		{
			get
			{
				return this.method.Module;
			}
		}

		// Token: 0x1700018D RID: 397
		// (get) Token: 0x0600067D RID: 1661 RVA: 0x00021424 File Offset: 0x0001F624
		public override bool HasParameters
		{
			get
			{
				return this.method.HasParameters;
			}
		}

		// Token: 0x1700018E RID: 398
		// (get) Token: 0x0600067E RID: 1662 RVA: 0x00021444 File Offset: 0x0001F644
		public override Collection<ParameterDefinition> Parameters
		{
			get
			{
				return this.method.Parameters;
			}
		}

		// Token: 0x1700018F RID: 399
		// (get) Token: 0x0600067F RID: 1663 RVA: 0x00021464 File Offset: 0x0001F664
		public override bool ContainsGenericParameter
		{
			get
			{
				return this.method.ContainsGenericParameter;
			}
		}

		// Token: 0x06000680 RID: 1664 RVA: 0x0000461C File Offset: 0x0000281C
		internal MethodSpecification(MethodReference method)
		{
			Mixin.CheckMethod(method);
			this.method = method;
			this.token = new MetadataToken(TokenType.MethodSpec);
		}

		// Token: 0x06000681 RID: 1665 RVA: 0x00021484 File Offset: 0x0001F684
		public sealed override MethodReference GetElementMethod()
		{
			return this.method.GetElementMethod();
		}

		// Token: 0x040001DA RID: 474
		private readonly MethodReference method;
	}
}
